

/**
  *格式化时间
  *@param {String} time [可以new Date()的时间]
  *@param {String} format [时间格式化类型
      yyyy            年
      M               月       不用补0
      MM              月       需要补0
      W               周       不用补0
      WW              周       需要补0
      d               日       不用补0
      dd              日       需要补0
      H               24小时    不用补0
      HH              24小时    需要补0
      h               12小时    不用补0
      hh              12小时    需要补0
      m               分       不用补0
      mm              分       需要补0
      s               秒       不用补0
      ss              秒       需要补0
      timestamp       时间戳   
      例子：yyyy年MM月dd日 HH:mm:ss
    ]
 */
function switchTime (time, format) {
  format = format ? format : 'yyyy年MM月dd日 HH:mm:ss';
  var res = format;
  var date = new Date(time);
  var timestamp = date.getTime(),
    year = date.getFullYear(),
    month = date.getMonth() + 1,
    day = date.getDate(),
    hours = date.getHours(),
    minutes = date.getMinutes(),
    seconds = date.getSeconds(),
    week = date.getDay(); // 0是星期日
  // 判断传入是否可以转换为时间
  if (!year) {
    return time;
  }
  // 替换时间戳
  res = res.replace(/timestamp/g, timestamp);
  // 替换年
  res = res.replace(/yyyy/g, year);
  // 替换月
  res = res.replace(/MM/g, makeUpNum(month));
  res = res.replace(/M/g, month);
  // 替换日
  res = res.replace(/dd/g, makeUpNum(day));
  res = res.replace(/d/g, day);
  // 替换时
  res = res.replace(/HH/g, makeUpNum(hours));
  res = res.replace(/H/g, hours);
  // 替换分
  res = res.replace(/mm/g, makeUpNum(minutes));
  res = res.replace(/m/g, minutes);
  // 替换秒
  res = res.replace(/ss/g, makeUpNum(seconds));
  res = res.replace(/s/g, seconds);
  // 替换周
  res = res.replace(/WW/g, makeUpNum(week));
  res = res.replace(/W/g, week);
  return res;
}

/**
 *数字补0
 @param {Number} val [需要补0的数]
 */
function makeUpNum (val) {
    return val < 10 ? '0' + parseInt(val) : val;
}

/**
 *拷贝
 */
function copy (data) {
    return JSON.parse(JSON.stringify(data));
}

/**
 *判断是否为空
 *@return {Boolean} [true为空，false不为空]
 */
function isEmpty (val) {
  if (typeof val == 'string') {
    val = val.trim();
  }
  return !val && val!==0 && typeof val!=="boolean"?true:false;
}

// 保留小数位数
/**
 *保留几位小数
 *@param {Number} val [传入的值]
 *@param {Number} num [保留小数的位数]
 *@return {Number} [保留小数位数后的数字]
 */
function toFixed(val, num) {
  var res = Number(val);
  if (!res) {
    return res;
  }
  res = res.toFixed(num);
  var arr = ('' + res).split('.');
  if (arr[1].length > num) {
    arr[1] = arr[1].slice(0, num);
    res = arr.join('.');
  }
  return res;
}

/**
 *根据编码获取对应名称
 *list 列表
 *value 值
 *labelKey
 *valueKey
 *else 不存在时，显示内容，默认''
 */
function getLabelByValue (list, value, labelKey='label', valueKey='value', empty='') {
  var res = empty || '';
  if (!list || isEmpty(value)) {
    return res;
  }

  for (var i = 0; i < list.length; i++) {
    if (list[i][valueKey] == value) {
      res = list[i][labelKey];
      break;
    }
  }
  return res;
}

// 根据最后一集code获取族列表
function getClanByValue(list, value, valueKey='value', childrenKey='children') {
  let res = [];
  ergodic(list, []);
  return res;

  function ergodic(arr, aMenu) {
    for(let i = 0; i < arr.length; i++) {
      if(res.length) {
        break;
      }
      let item = arr[i];
      let brr = [...aMenu, item];
      if(item[valueKey] == value) {
        res = brr;
        break;
      }
      if(item[childrenKey]) {
        ergodic(item[childrenKey], brr);
      }
    }
  }
}

/*使用方法
<el-input v-model="form.num" @blur="form.num = $number(form.num,2)"></el-input>
*/
/**
 *转换为数字小数位数
 *@param {Number} data 需要保留小数点的数，如果不是数，返回'' 
 *@param {Number} precision 小数点位数
 *@return {Number} 返回截取小数点后的数，如果不是数，返回''
 */
function toNumber (data, precision) {
  let value = data;
  // 判断是否是数字
  if (!/^(\-|\+)?\d+(\.\d+)?$/.test(value)) {
    return '';
  }
  var content = parseFloat(value);
  if (!content) {
    content = 0.00;
  }
  let arg_precision = precision || 0;//默认保留至整数
  return Number(content.toFixed(arg_precision));
}

/**
 *根据身份证获取出生日期
 */
function getBirthdayByIdcard (idcard) {
  var res = '';
  if (idcard) {
    idcard = '' + idcard;
  } else {
    return '';
  }
  if (idcard.length == 15) {
    res = '19' + idcard.slice(6,8) + '-' + idcard.slice(8,10) + '-' + idcard.slice(10,12);
  } else if (idcard.length == 18) {
    res = idcard.slice(6,10) + '-' + idcard.slice(10,12) + '-' + idcard.slice(12,14);
  }
  return res;
}

/**
 *根据身份证获取性别
 * 1男2女
 */
function getSexByIdcard (idcard) {
  var res = '';
  if (idcard) {
    idcard = '' + idcard;
  } else {
    return '';
  }
  if (idcard.length == 15) {
    res = parseInt(idcard[14]) % 2 == 1 ? 1 : 2;
  } else if (idcard.length == 18) {
    res = parseInt(idcard[16]) % 2 == 1 ? 1 : 2;
  }
  return res;
}

/*使用方法
obj = { aa: [ {name: '张三'} ] }
getValueByKeys(obj, 'aa', 0, 'name');
getValue () {
  return getValueByKeys(this.detail, ...arguments);
}
*/
/**
 *根据key获取对象的相应值，后面的都是参数，第二个是第一级，第三个是第二级参数
 */
function getValueByKeys () {
    var args = arguments;
    var res = args[0]; // 第一个是对象
    if (!res) {
        return '';
    }
    for (var i = 1; i < args.length; i++) {
        var item = args[i];
        if (isEmpty(res[item])) {
            res = '';
            break;
        } else {
            res = res[item];
        }
    }
    return res;
}

/**
 * 获取时间列表 
 **/
function getTimesByLength(length) {
  let res = [];
  for(let i = length-1; i >= 0; i--) {
    var date = new Date();
    date.setDate(date.getDate()-i);
    res.push(switchTime(date, 'MM.dd'));
  }
  return res;
}

const Tools = {
  switchTime: switchTime,
  makeUpNum: makeUpNum,
  copy: copy,
  isEmpty: isEmpty,
  toFixed: toFixed,
  getLabelByValue: getLabelByValue,
  getClanByValue: getClanByValue,
  toNumber: toNumber,
  getBirthdayByIdcard: getBirthdayByIdcard,
  getSexByIdcard: getSexByIdcard,
  getTimesByLength: getTimesByLength
};

